
package GUI;

/**
 *
 * @author David Ponce
 * @author Philipp Armbruster
 */

import Flightadministration.Flightadministration;
import Data.*;
import java.rmi.RemoteException;
import Interaction.ServerConnection;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;



public class AirportCreate extends JPanel {

    /*Das AdministrationsObjekt, welches über die getConnection methode vom RMI Server geholt wird, dem "admin" objekt zugewiesen.
     *Dadurch ist eine Kommunikation zwischen GUI und Applikationsserver mittels RMI möglich*/
    final Flightadministration admin = ServerConnection.getConnection();
    public JTextField textfield1;
    public JTextField textfield2;
    public JTextField textfield3;
    public JTextField textfield4;
    public Vector<Airport> allAirports;
    final Main td;
    private JPanel jp;


    // Konstruktor
    public AirportCreate(final Main td) throws java.rmi.RemoteException {

        this.td = td;
        showAirportCreate();
    }


    // Methoden
    public void showAirportCreate(){

        jp = new JPanel();

        //GridBagLayout
        //**********************************************************************
        GridBagLayout gbl = new GridBagLayout();
        jp.setLayout(gbl);
        jp.setBackground(Color.white);

        GridBagConstraints constraints = new GridBagConstraints();

        constraints.fill = GridBagConstraints.HORIZONTAL;   // wie Komponente Bereich füllen soll
        constraints.weightx = 1;                     // Breite
        constraints.weighty = 1;                    // Höhe
        constraints.insets = new Insets(0,0,1,1);   // Abstände definieren


        //Label
        //**********************************************************************

        JLabel headline = new JLabel("<html><h2 color=blue>Flughafen anlegen</h2></html>");
        headline.setHorizontalAlignment(JLabel.CENTER);
        constraints.gridx = 0;
        constraints.gridy = 0;
        constraints.gridwidth = 2;
        jp.add(headline, constraints);

        JLabel label1 = new JLabel("Internationales Kürzel festlegen: ");
        constraints.gridx = 0;
        constraints.gridy = 1;
        constraints.gridwidth = 1;
        jp.add(label1, constraints);

        textfield1 = new JTextField();
        constraints.gridx = 1;
        constraints.gridy = 1;
        constraints.gridwidth = 1;
        jp.add(textfield1, constraints);

        JLabel label2 = new JLabel("Name festelegen: ");
        constraints.gridx = 0;
        constraints.gridy = 2;
        constraints.gridwidth = 1;
        jp.add(label2, constraints);

        textfield2 = new JTextField();
        constraints.gridx = 1;
        constraints.gridy = 2;
        constraints.gridwidth = 1;
        jp.add(textfield2, constraints);

        JLabel label3 = new JLabel("Stadt festlegen: ");
        constraints.gridx = 0;
        constraints.gridy = 3;
        constraints.gridwidth = 1;
        jp.add(label3, constraints);

        textfield3 = new JTextField();
        constraints.gridx = 1;
        constraints.gridy = 3;
        constraints.gridwidth = 1;
        jp.add(textfield3, constraints);

        JLabel label4 = new JLabel("Land festlegen: ");
        constraints.gridx = 0;
        constraints.gridy = 4;
        constraints.gridwidth = 1;
        jp.add(label4, constraints);

        textfield4 = new JTextField();
        constraints.gridx = 1;
        constraints.gridy = 4;
        constraints.gridwidth = 1;
        jp.add(textfield4, constraints);

        
        //Buttons
        //**********************************************************************

        JButton button_CreateAirport = new JButton("Flughafen anlegen");
        constraints.gridx = 0;
        constraints.gridy = 5;
        constraints.gridwidth = 1;
        jp.add(button_CreateAirport, constraints);

        JButton button_Cancel = new JButton("Zurück zur Übersicht");
        constraints.gridx = 1;
        constraints.gridy = 5;
        constraints.gridwidth = 1;
        jp.add(button_Cancel, constraints);


        //Action Listener
        button_CreateAirport.addActionListener(new ActionListener() {
                @Override
        public void actionPerformed(ActionEvent e){
            if ((textfield1.getText().equals("")) ||
                (textfield2.getText().equals("")) ||
                (textfield3.getText().equals("")) ||
                (textfield4.getText().equals("")))
            {
                JOptionPane.showMessageDialog(null, "Bitte alle Felder ausfüllen!");
            }
            else {
                // Prüfen ob int. Kürzel des Flughafens auch nur aus 3 Buchstaben besteht
                if(textfield1.getText().length() != 3){
                    // Wenn nicht, entsprechende Meldung ausgeben und das Textfeld leeren
                    JOptionPane.showMessageDialog(null, "<html><p style=\"color:red; text-align: center\">" + 
                                                        "Das internationale Kürzel muss<br>" +
                                                        "immer aus 3 Buchstaben bestehen!" +
                                                        "</p></html>");
                    textfield1.setText("");
                }
                else {
                    try {
                        // Alle Flughäfen aus der Datenbank auslesen
                        allAirports = admin.getAllAirportsForComboBox();

                        // Vector über nachfolgende for-Schleife mit allen int. Kürzeln befüllen
                        Vector<String> allIntAirportIds = new Vector<String>();

                        for(int i = 0; i<allAirports.size(); i++) {
                            String intAirportId = allAirports.get(i).getInternationalId();
                            allIntAirportIds.add(intAirportId);
                        }

                        // Prüfen ob es einen Flughafen mit dem eingegeben Kürzel bereits gibt
                        if(allIntAirportIds.contains(textfield1.getText())) {
                            // Wenn ja, entsprechende Meldung ausgeben und Textfeld leeren
                            JOptionPane.showMessageDialog(null, "<html><p style=\"color:red; text-align: center\">" +
                                                                "Es ist bereits ein Flughafen mit dem internationalen Kürzel " + textfield1.getText() + " vorhanden,<br>" +
                                                                "bitte wählen Sie daher ein anderes internationales Kürzel aus,<br>" + "" +
                                                                "da diese weltweit eindeutig sein müssen!" +
                                                                "</p></html>");
                            textfield1.setText("");
                        }
                        else {
                            // Wenn nicht, Flughafen in die Datenbank speichern und Daten der GUI aktualisieren
                            admin.createAirport(textfield1.getText(), textfield2.getText(), textfield3.getText(), textfield4.getText());

                            td.updateAirport();

                            JOptionPane.showMessageDialog(null, "Flughafen angelegt");

                            textfield1.setText("");
                            textfield2.setText("");
                            textfield3.setText("");
                            textfield4.setText("");

                            ((CardLayout) td.rightp.getLayout()).show(td.rightp, "AirportM");
                        }
                    } catch (RemoteException ex) {
                        Logger.getLogger(AirportCreate.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            }
        });

        button_Cancel.addActionListener(new ActionListener() {
                @Override
        public void actionPerformed(ActionEvent e){
                    ((CardLayout) td.rightp.getLayout()).show(td.rightp,"AirportM");

            }
        });
    }

    public JPanel getJp() {
        return jp;
    }

}
